I'm (not) a Pirate 💣
Wie vroeger cassettebandjes kopieerde, later CD's naar MP3 ripte en muziek gewoon als bestand op de computer zette, zal waarschijnlijk begrijpen waar dit artikel vandaan komt: een beetje nostalgie, vermengd met de mogelijkheden van de digitale wereld.
Mijn kinderen vinden dat gekopieer van muziek maar verdacht - bijna genoeg om mij aan te geven wegens piraterij. Vroeger noemden we dat "gewoon een bandje kopiëren" - en was het eigenlijk geen probleem, maar eerder een "nationale volkssport".
Even fast-forward ⏩ naar vandaag. De eindeloze muziekmixen en verzamelingen op YouTube ken je waarschijnlijk wel. Ideaal voor onderweg in de auto, tijdens het klussen of gewoon lekker op de achtergrond. Alleen is onderweg een stabiele internetverbinding niet altijd vanzelfsprekend. Een haperende mobiele verbinding en een YouTube-video die ineens niet verder wil - of, nog erger, eerst een reclame wil laten zien (en horen) - zijn nu eenmaal geen ideale combinatie.
In deze blogpost laat ik zien hoe je de muziek uit zo'n YouTube-mix kunt downloaden (rippen) en tijdelijk als MP3-bestanden kunt opslaan. Zo kun je er ook naar luisteren wanneer je even geen internetverbinding hebt.
Instructies voor Linux en Windows
Hieronder vind je eerst de instructies voor Linux, maar uiteraard heb ik ook een beschrijving voor Windows gemaakt.
Ik werk liever niet met het commerciële kwaad dat Windows heet - en Apple-producten zijn ook niet echt mijn ding. Ik gebruik beide maar weinig, en Apple eigenlijk helemaal niet. Het ligt me gewoon niet zo. Ieder z'n ding: gebruik gewoon wat je goed ligt - en met plezier. Ik heb gelezen dat yt-dlp onder macOS ook eenvoudig met Homebrew geïnstalleerd kan worden:
brew install yt-dlp ffmpeg
Opdrachtprompt t.o.v. grafische interface
In deze blogpost gebruik ik de opdrachtprompt om met yt-dlp te werken. Dat geeft je veel mogelijkheden en je kunt precies zien wat er gebeurt, maar misschien werk je liever met een grafische interface. Ook daar is gelukkig in voorzien.
Hoewel ik zelf nog geen grafische interface voor yt-dlp heb geprobeerd, zijn er verschillende mogelijkheden. Zo is er bijvoorbeeld yt-dlp-gui van Tomakura.
Arrr yt-dlp 🏴☠️ voor Linux
Wat je hiervoor nodig hebt is yt-dlp, een command-line programma waarmee je onder andere audio en video van YouTube kunt downloaden.
Zodra yt-dlp is geïnstalleerd, zoek je de gewenste muziekverzameling op YouTube op. Controleer daarbij of de video over hoofdstukken beschikt. Die hoofdstukken gebruiken we namelijk om de afzonderlijke nummers automatisch uit de mix te knippen.
Vervolgens kun je onder Linux de volgende commando's uitvoeren.
mkdir -p ~/naam
cd ~/naam
yt-dlp -x --audio-format mp3 --split-chapters -o "chapter:%(section_number)s - %(section_title)s.%(ext)s" "https://www.youtube.com/watch[..]"
De eerste regel maakt een map aan waarin de bestanden terechtkomen. Met de tweede open je die map. Daarna zorgt yt-dlp ervoor dat de audio wordt gedownload, naar MP3 wordt geconverteerd en vervolgens per hoofdstuk wordt opgesplitst.
Wanneer ik bijvoorbeeld een populaire Happy Hardcore-mix wil downloaden, ziet dat er als volgt uit:
$ mkdir -p ~/nonstop
$ cd ~/nonstop
$ yt-dlp -x --audio-format mp3 --split-chapters -o "chapter:%(section_number)s - %(section_title)s.%(ext)s" "https://www.youtube.com/watch?v=vPFlTbmbLaE"
[youtube] Extracting URL: https://www.youtube.com/watch?v=vPFlTbmbLaE
[youtube] vPFlTbmbLaE: Downloading webpage
WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
[youtube] vPFlTbmbLaE: Downloading visionos player API JSON
[youtube] vPFlTbmbLaE: Downloading m3u8 information
[info] vPFlTbmbLaE: Downloading 1 format(s): 251
[download] Destination: HAPPY HARDCORE - BACK TO THE 90s [vPFlTbmbLaE].webm
[download] 100% of 81.85MiB in 00:00:02 at 40.74MiB/s
[ExtractAudio] Destination: HAPPY HARDCORE - BACK TO THE 90s [vPFlTbmbLaE].mp3
Deleting original file HAPPY HARDCORE - BACK TO THE 90s [vPFlTbmbLaE].webm (pass -k to keep)
[SplitChapters] Splitting video by chapters; 50 chapters found
[SplitChapters] Chapter 001; Destination: 1 - 1. DJ Paul Elstak - Luv U More.mp3
[SplitChapters] Chapter 002; Destination: 2 - 2. Wonderland - In Our Dreams.mp3
[SplitChapters] Chapter 003; Destination: 3 - 3. Dune - Million Miles From Home.mp3
[SplitChapters] Chapter 004; Destination: 4 - 4. DJ Paul Elstak - Rainbow In The Sky.mp3
[SplitChapters] Chapter 005; Destination: 5 - 5. Critical Mass - Burning Love (Happy Radio Edit).mp3
[SplitChapters] Chapter 006; Destination: 6 - 6. Charly Lownoise & Mental Theo - Stars.mp3
[SplitChapters] Chapter 007; Destination: 7 - 7. Dune - Are You Ready To Fly.mp3
[SplitChapters] Chapter 008; Destination: 8 - 8. Rave Nation - Going Crazy.mp3
[SplitChapters] Chapter 009; Destination: 9 - 9. Critical Mass - Dancing Together.mp3
[SplitChapters] Chapter 010; Destination: 10 - 10. DJ Paul Elstak - Life Is Like A Dance.mp3
[..]
Zoals je ziet, worden de 50 hoofdstukken automatisch als afzonderlijke MP3-bestanden opgeslagen. De bestandsnamen zijn daarbij gebaseerd op het hoofdstuknummer en de titel van het nummer.
Het resultaat ziet er als volgt uit:
$ ls -lashit
total 170M
17072886 4.0K drwxrwxr-x 2 bouke bouke 4.0K 2026-09-12 19:09 .
17039418 12K drwxr-xr-x 108 bouke bouke 12K 2026-09-12 19:03 ..
17072931 1.5M -rw-rw-r-- 1 bouke bouke 1.5M 2026-09-12 19:07 '10 - 10. DJ Paul Elstak - Life Is Like A Dance.mp3'
17072932 1.0M -rw-rw-r-- 1 bouke bouke 1023K 2026-09-12 19:07 '11 - 11. U96 - Love Religion.mp3'
17072914 2.1M -rw-rw-r-- 1 bouke bouke 2.1M 2026-09-12 19:07 '1 - 1. DJ Paul Elstak - Luv U More.mp3'
17072933 1.7M -rw-rw-r-- 1 bouke bouke 1.7M 2026-09-12 19:07 '12 - 12. Interactive - Forever Young.mp3'
17072934 1.6M -rw-rw-r-- 1 bouke bouke 1.6M 2026-09-12 19:07 '13 - 13. Network - Words.mp3'
17072935 2.0M -rw-rw-r-- 1 bouke bouke 1.9M 2026-09-12 19:07 '14 - 14. Mark Oh - Love Song.mp3'
17072936 956K -rw-rw-r-- 1 bouke bouke 956K 2026-09-12 19:07 '15 - 15. Charly Lownoise & Mental Theo - Together In Wonderland.mp3'
17072937 1.8M -rw-rw-r-- 1 bouke bouke 1.8M 2026-09-12 19:07 "16 - 16. Mark Oh - Tears Don't Lie.mp3"
[..]
De bestanden zijn op dit moment prima bruikbaar, maar de dubbele nummering in de bestandsnamen is natuurlijk een beetje onhandig. Dat kunnen we eenvoudig oplossen met een klein shell-scriptje.
Om de bestandsnamen wat te fatsoeneren gebruik ik dit commando:
for f in *.mp3; do
newname=$(echo "$f" | sed -E 's/^[0-9]+ - //')
mv "$f" "$newname"
done
Hiermee wordt het eerste nummer en de daaropvolgende - uit de bestandsnaam verwijderd. Het nummer dat onderdeel is van de oorspronkelijke hoofdstuktitel blijft daardoor behouden.
Het eindresultaat ziet er dan als volgt uit:
$ ls -lashit
total 170M
17072886 4.0K drwxrwxr-x 2 bouke bouke 4.0K 2026-09-12 19:12 .
17039418 12K drwxr-xr-x 108 bouke bouke 12K 2026-09-12 19:03 ..
17072931 1.5M -rw-rw-r-- 1 bouke bouke 1.5M 2026-09-12 19:07 '10. DJ Paul Elstak - Life Is Like A Dance.mp3'
17072932 1.0M -rw-rw-r-- 1 bouke bouke 1023K 2026-09-12 19:07 '11. U96 - Love Religion.mp3'
17072933 1.7M -rw-rw-r-- 1 bouke bouke 1.7M 2026-09-12 19:07 '12. Interactive - Forever Young.mp3'
17072934 1.6M -rw-rw-r-- 1 bouke bouke 1.6M 2026-09-12 19:07 '13. Network - Words.mp3'
17072935 2.0M -rw-rw-r-- 1 bouke bouke 1.9M 2026-09-12 19:07 '14. Mark Oh - Love Song.mp3'
17072936 956K -rw-rw-r-- 1 bouke bouke 956K 2026-09-12 19:07 '15. Charly Lownoise & Mental Theo - Together In Wonderland.mp3'
17072937 1.8M -rw-rw-r-- 1 bouke bouke 1.8M 2026-09-12 19:07 "16. Mark Oh - Tears Don't Lie.mp3"
17072938 2.0M -rw-rw-r-- 1 bouke bouke 2.0M 2026-09-12 19:07 '17. Moby - Feeling So Real (Westbam Remix).mp3'
17072939 1.7M -rw-rw-r-- 1 bouke bouke 1.7M 2026-09-12 19:07 '18. U96 - Club Bizarre.mp3'
17072940 2.8M -rw-rw-r-- 1 bouke bouke 2.8M 2026-09-12 19:07 '19. Party Animals - Atomic.mp3'
17072914 2.1M -rw-rw-r-- 1 bouke bouke 2.1M 2026-09-12 19:07 '1. DJ Paul Elstak - Luv U More.mp3'
[..]
Arrr yt-dlp 🏴☠️ voor Windows
Zelf gebruik ik Windows niet vaak. Maar ook onder Windows kun je gewoon yt-dlp gebruiken.
Met het onderstaande script kun je alles wat je nodig hebt installeren in C:\Tools.
Je kunt het script hieronder kopiëren en plakken in een PowerShell-scherm, of het eerst even opslaan als .ps1-bestand.
Standaard staat PowerShell niet bepaald te springen om scripts uit te voeren. Voer daarom vooraf het volgende commando uit om het uitvoeren van scripts voor deze PowerShell-sessie toe te staan:
Set-ExecutionPolicy -Scope Process -Force Bypass

Uit de schermafdruk hierboven kun je opmaken dat ik het onderstaande script in mijn Scripts-map onder Documenten heb opgeslagen.
# Maak Tools-map
New-Item -ItemType Directory -Force -Path C:\Tools | Out-Null
# Installeer yt-dlp
Invoke-WebRequest -Uri "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe" -OutFile "C:\Tools\yt-dlp.exe"
# Installeer ffmpeg
Invoke-WebRequest -Uri "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip" -OutFile "C:\Tools\ffmpeg.zip"
Expand-Archive -Path "C:\Tools\ffmpeg.zip" -DestinationPath "C:\Tools\ffmpeg-temp" -Force
$ffmpegBin = Get-ChildItem -Path "C:\Tools\ffmpeg-temp" -Filter "bin" -Recurse -Directory | Select-Object -First 1
Copy-Item "$($ffmpegBin.FullName)\*.exe" -Destination "C:\Tools\"
Remove-Item "C:\Tools\ffmpeg-temp" -Recurse -Force
Remove-Item "C:\Tools\ffmpeg.zip" -Force
# Installeer Node.js (portable)
$nodeIndex = Invoke-RestMethod -Uri "https://nodejs.org/dist/index.json"
$latestLts = $nodeIndex | Where-Object { $_.lts -ne $false } | Select-Object -First 1
$nodeVersion = $latestLts.version
$nodeZipUrl = "https://nodejs.org/dist/$nodeVersion/node-$nodeVersion-win-x64.zip"
# Zet alles in de Tools-map en ruim de donwloads op
Invoke-WebRequest -Uri $nodeZipUrl -OutFile "C:\Tools\node.zip"
Expand-Archive -Path "C:\Tools\node.zip" -DestinationPath "C:\Tools\node-temp" -Force
$nodeFolder = Get-ChildItem -Path "C:\Tools\node-temp" -Directory | Select-Object -First 1
Copy-Item "$($nodeFolder.FullName)\node.exe" -Destination "C:\Tools\"
Copy-Item "$($nodeFolder.FullName)\npm.cmd" -Destination "C:\Tools\" -ErrorAction SilentlyContinue
Copy-Item "$($nodeFolder.FullName)\npm" -Destination "C:\Tools\" -ErrorAction SilentlyContinue
Remove-Item "C:\Tools\node-temp" -Recurse -Force
Remove-Item "C:\Tools\node.zip" -Force
# Voeg de Tools-map aan de PATH variabele toe
$currentPath = [Environment]::GetEnvironmentVariable("PATH", "User")
if ($currentPath -notlike "*C:\Tools*") {
[Environment]::SetEnvironmentVariable("PATH", "$currentPath;C:\Tools", "User")
}
# Toon gebruikersinstructies
Write-Host ""
Write-Host "Klaar. Geinstalleerd: yt-dlp, ffmpeg, node.js $nodeVersion" -ForegroundColor Green
Write-Host "Herstart PowerShell en test met:"
Write-Host " yt-dlp --version"
Write-Host " ffmpeg -version"
Write-Host " node --version"

Open na installatie een nieuwe Opdrachtprompt om yt-dlp.exe uit te voeren.
Hieronder wordt een voorbeeld weergegeven.
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\Admin> cd .\Music\
PS C:\Users\Admin\Music> mkdir nonstop-mix
Directory: C:\Users\Admin\Music
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 9/12/2026 9:40 PM nonstop-mix
PS C:\Users\Admin\Music> cd .\nonstop-mix\
PS C:\Users\Admin\Music\nonstop-mix> yt-dlp.exe -x --audio-format mp3 --split-chapters -o "chapter:%(section_number)s - %(section_title)s.%(ext)s" "https://youtu.be/q_QyaPhykuI?si=QLh9yOK1gyVBiCCw"
[youtube] Extracting URL: https://youtu.be/q_QyaPhykuI?si=QLh9yOK1gyVBiCCw
[youtube] q_QyaPhykuI: Downloading webpage
WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
[youtube] q_QyaPhykuI: Downloading visionos player API JSON
[youtube] q_QyaPhykuI: Downloading m3u8 information
[info] q_QyaPhykuI: Downloading 1 format(s): 251
[download] Destination: 80s Songs Everyone Knows 🎧 Ultimate Nostalgia Hits Mix (No Skip Playlist) [q_QyaPhykuI].webm
[download] 100% of 97.02MiB in 00:00:01 at 57.45MiB/s
[ExtractAudio] Destination: 80s Songs Everyone Knows 🎧 Ultimate Nostalgia Hits Mix (No Skip Playlist) [q_QyaPhykuI].mp3
Deleting original file 80s Songs Everyone Knows 🎧 Ultimate Nostalgia Hits Mix (No Skip Playlist) [q_QyaPhykuI].webm (pass -k to keep)
[SplitChapters] Splitting video by chapters; 25 chapters found
[SplitChapters] Chapter 001; Destination: 1 - a-ha – Take On Me.mp3
[SplitChapters] Chapter 002; Destination: 2 - Michael Jackson – Billie Jean.mp3
[SplitChapters] Chapter 003; Destination: 3 - Wham! – Wake Me Up Before You Go-Go.mp3
[SplitChapters] Chapter 004; Destination: 4 - Madonna – Like a Prayer.mp3
[SplitChapters] Chapter 005; Destination: 5 - Bon Jovi – Livin' On A Prayer.mp3
[SplitChapters] Chapter 006; Destination: 6 - Cyndi Lauper – Girls Just Want to Have Fun.mp3
[SplitChapters] Chapter 007; Destination: 7 - Europe – The Final Countdown.mp3
[SplitChapters] Chapter 008; Destination: 8 - Queen – Another One Bites The Dust.mp3
[SplitChapters] Chapter 009; Destination: 9 - Whitney Houston – I Wanna Dance with Somebody.mp3
[SplitChapters] Chapter 010; Destination: 10 - Journey – Don't Stop Believin'.mp3
[SplitChapters] Chapter 011; Destination: 11 - Survivor – Eye of the Tiger.mp3
[SplitChapters] Chapter 012; Destination: 12 - Ray Parker Jr. – Ghostbusters.mp3
[SplitChapters] Chapter 013; Destination: 13 - The Bangles – Walk Like an Egyptian.mp3
[SplitChapters] Chapter 014; Destination: 14 - Toto – Africa.mp3
[SplitChapters] Chapter 015; Destination: 15 - Bruce Springsteen – Dancing In the Dark.mp3
[SplitChapters] Chapter 016; Destination: 16 - Simple Minds – Don't You (Forget About Me).mp3
[SplitChapters] Chapter 017; Destination: 17 - Alphaville – Forever Young.mp3
[SplitChapters] Chapter 018; Destination: 18 - Berlin – Take My Breath Away.mp3
[SplitChapters] Chapter 019; Destination: 19 - George Michael – Careless Whisper.mp3
[SplitChapters] Chapter 020; Destination: 20 - Cutting Crew – (I Just) Died In Your Arms.mp3
[SplitChapters] Chapter 021; Destination: 21 - Madonna – Like a Virgin.mp3
[SplitChapters] Chapter 022; Destination: 22 - Kool & The Gang – Celebration.mp3
[SplitChapters] Chapter 023; Destination: 23 - Earth, Wind & Fire – September.mp3
[SplitChapters] Chapter 024; Destination: 24 - Lipps Inc. – Funkytown.mp3
[SplitChapters] Chapter 025; Destination: 25 - Technotronic – Pump Up The Jam.mp3
PS C:\Users\Admin\Music\nonstop-mix>
De bestandsnamen zijn in dit voorbeeld niet voorzien van een dubbele nummering, dus hernoemen is niet nodig.
Maar Spotify enzo dan?
Spotify en al die andere diensten zijn handig? Nee, dank je. Ik ben nog van de generatie die cassettebandjes kopieerde en later zijn CD-collectie naar MP3 ripte. Ik ben dus gewend om muziek gewoon als bestand te hebben, in plaats van een abonnement te nemen op de mogelijkheid om ernaar te mogen luisteren - zolang een "ander" dat goed vindt en het dus wel of niet online beschikbaar stelt.
Een beetje ouderwets? Ach, misschien wel. Maar er zijn tegenwoordig genoeg liefhebbers die weer teruggrijpen naar de LP - en zelfs cassettebandjes schijnen weer hip te zijn. Ik noem het liever nostalgisch-retro. :LOL:
Ouderwets? Vast. Maar mijn MP3's vragen tenminste niet iedere maand of ik nog wel betaald heb.
Mag dit zomaar?
Een logische vraag natuurlijk. Het korte antwoord is: onder voorwaarden, ja. Maar de grens tussen wat wel en niet mag, is wat dunnetjes.
In Nederland bestaat voor muziek de zogenaamde thuiskopie. Je mag onder bepaalde voorwaarden een kopie maken van auteursrechtelijk beschermd materiaal voor eigen gebruik. Dat geldt ook voor een digitale kopie die je bijvoorbeeld op je telefoon of MP3-speler zet.
Daarbij is wel een belangrijke voorwaarde dat het materiaal zelf legaal is aangeboden. Een muziekvideo of mix die iemand zonder toestemming van de rechthebbenden op YouTube heeft gezet, mag je dus niet ineens legaal downloaden omdat hij toevallig op YouTube staat. Downloaden uit een illegale bron is niet toegestaan.
En uiteraard blijft de MP3 die je met yt-dlp maakt gewoon voor jezelf. Dus niet even je complete verzameling op een torrentsite zetten. Dat lijkt me eigenlijk ook wel zo netjes.
In deze blog ga ik dus uit van muziek die door de rechthebbende of met diens toestemming op YouTube is geplaatst, en van downloaden voor eigen, tijdelijk gebruik.
Bronvermelding afbeelding 🦜
Voor de banner van dit artikel is een afbeelding gebruikt van een muziek-cd met een piraterij-symbool. De afbeelding is beschikbaar gesteld onder de Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)-licentie. Deze licentie staat het gebruik en delen van de afbeelding toe, mits de oorspronkelijke maker wordt vermeld en naar de licentie wordt verwezen.
Daarom vermeld ik hieronder de bron en de bijbehorende licentie:
- Bron: Piracy music CD.jpg – Wikimedia Commons
- Maker: Santeri Viinamäki
- Licentie: CC BY-SA 4.0
